package eva.savant.business.ventas.view

import eva.savant.business.ventas.service.TSVenta
import eva.savant.businessobject.vt.Libroventas
import eva.savant.businessobject.vt.Vendedor
import eva.savant.businessobject.vt.Venta
import eva.savant.businessobject.vt.VentaDetalle

import javax.faces.bean.ManagedBean
import javax.faces.bean.SessionScoped
import javax.annotation.PostConstruct

@SessionScoped
@ManagedBean(name = 'ITFactura')
public class ITFactura extends Bean {

  Integer ventaId; def sum

  String report, barcode

  String doc, nit, razon

  Date dateIni, dateEnd

  @PostConstruct
  public void cleanEntity() {

    def f= entity != null? entity.fecha : new Date()


    ventaId = 0

    doc= nit= razon= ''

    dateIni = dateEnd= new Date()


    entity= new Venta(); init()

    entity.fecha= f

    entity.lsVentaDetalle= new ArrayList<VentaDetalle>()

    entity.vendedor= get(Vendedor,'persona.id=?',usuario.persona.id)

    if(entity.vendedor == null) addErrorMessage 'El usuario actual no es vendedor'


    lsEntity= new ArrayList<Libroventas>()
  }

  public void editEntity(Object id) {

    def l= get(Libroventas,id); entity= new Venta(cliente:l.venta.cliente)

    report= reportService.reportToTXT('facturaDoc',['libroventasId':l?.id,'libroventasDoc':l.documento.split(',') as List])

    def ini= report.indexOf('['), end= report.indexOf(']')

    def code= report.substring(ini+1,end)

    barcode= code.replaceAll(' ','').replaceAll('\n','')

    report= report.substring(0,ini)
  }

  public List findLsEntity() {

    sum= get(Libroventas,'sum(importe), sum(iva), sum(it): fecha between ? and ?', dateIni, toMidnight(dateEnd))

    sum[0]= round(sum[0],2); sum[1]= round(sum[1],2); sum[2]= round(sum[2],2)


    if(ventaId > 0) return find(Libroventas,'venta.id=?', ventaId)

    return find(Libroventas,'fecha between ? and ? order by id', dateIni,toMidnight(dateEnd))
  }

  public boolean mergeEntity(Object entity) { entity= (Venta) alta(entity)

    doc= doc.trim(); entity.id= new Integer(doc.split(' ')[0])

    def tsVenta= (TSVenta) getSpringBean('tsVenta')

    entity= (Libroventas) tsVenta.saveFactura(entity.vendedor.dosificacion,entity,nit,razon,doc)

    addInfoMessage 'Se registro correctamente la FACTURA ' + entity?.factura; return entity != null
  }

  public void detailAdd() {

    def v= get(Venta,ventaId)

    if(entity.cliente != null && entity.cliente.id != v.cliente.id) { addErrorMessage 'La venta es de otro cliente'; return }

    if(doc.contains(v.id+'')) { addErrorMessage 'La venta ya se agrego al detalle'; return }


    doc= doc + ' ' + v.id

    nit= v.cliente.nit

    razon= v.cliente.razon

    entity.cliente= v.cliente

    for(x in v.lsVentaDetalle)

    entity.lsVentaDetalle.add x


    entity.total = 0; for(x in entity.lsVentaDetalle) entity.total = entity.total + x.total
  }

  public void cleanPrint() {

    report= barcode= null
  }

}